package com.sy.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import org.springframework.stereotype.Component;

/**
 * @author Monkey-D-Gu
 * @version 1.0
 * @date 2020/9/11 0011 10:21
 * @usage 前后端交互的携带错误码，错误信息，数据的Json对象
 */

@JsonInclude(JsonInclude.Include.NON_NULL)
@Component
public class JsonResult {
    //状态码
    private Integer code;
    //错误信息
    private String error;
    //携带数据
    private Object data;

    public JsonResult() {
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "JsonResult{" +
                "code=" + code +
                ", error='" + error + '\'' +
                ", data=" + data +
                '}';
    }

    /**
     * 后端服务器运行未出错，不需要携带数据的情况下，返回正确的JsonResult
     *
     * @param code 正确情况下的状态码
     * @return JsonResult对象
     */
    public static JsonResult buildSuccess(Integer code) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode(code);
        return jsonResult;
    }

    /**
     * 后端服务器运行未出错，需要携带数据的情况下，返回正确的JsonResult
     *
     * @param code 正确情况下的状态码
     * @param data 需要携带的数据
     * @return JsonResult对象
     */
    public static JsonResult buildSuccess(Integer code, Object data) {
        JsonResult jsonResult = JsonResult.buildSuccess(code);
        jsonResult.setData(data);
        return jsonResult;
    }

    /**
     * 后端服务器未能正确执行完程序，需要携带错误信息，返回出现错误状态的JsonResult
     *
     * @param code  错误情况下的状态码
     * @param error 错误信息
     * @return JsonResult对象
     */
    public static JsonResult buildFailure(Integer code, String error) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode(code);
        jsonResult.setError(error);
        return jsonResult;
    }
}
